package main

import (
	"flag"
	"fmt"
)

// 定义命令行参数flag，定义了默认值，方式一
// flag.Type(flag名,默认值,提示输入的信息)
var Input_pstrName = flag.String("name", "gerry", "input ur name")
var Input_piAge = flag.Int("age", 20, "input ur age")

var Input_flagvar int

func Init() {
	// 定义命令行参数flag，定义了默认值，方式二
	//Type 指针, flag 名, 默认值, 帮助信息
	//TypeVar 可以是 IntVar、StringVar、BoolVar 等，其功能为将 flag 绑定到一个变量上
	flag.IntVar(&Input_flagvar, "flagname", 1234, "help message for flagname")
}
func main() {
	Init()
	// 定义好命令行 flag 参数后，需要通过调用 flag.Parse() 来对命令行参数进行解析。
	flag.Parse()
	// After parsing, the arguments after the flag are available as the slice flag.Args() or individually as flag.Arg(i). The arguments are indexed from 0 through flag.NArg()-1
	// Args returns the non-flag command-line arguments
	// NArg is the number of arguments remaining after flags have been processed
	fmt.Printf("args=%s, num=%d\n", flag.Args(), flag.NArg())
	for i := 0; i != flag.NArg(); i++ {
		fmt.Printf("arg[%d]=%s\n", i, flag.Arg(i))
	}
	fmt.Println("name=", *Input_pstrName)
	fmt.Println("age=", *Input_piAge)
	fmt.Println("flagname=", Input_flagvar)
}

//go run demo.go -name "aaa" -age=123 -flagname=999
//不加参数时，使用默认参数
